#ifndef _NOISE_H_
#define _NOISE_H_
#include "algohub_export.h"
#include "wenz_model.h"
#include <vector>
#include <string>

namespace AlgoEnvNoise
{


	struct WindData {
		std::vector<std::vector<double>> wind_speeds;  //(lat, lon)
		std::vector<double> lat;
		std::vector<double> lon;
		std::string time;
	};

	struct ShipData {
		std::vector < std::vector<double>> ship_densitis;  // (lat, lon)
		std::vector<double> lat;
		std::vector<double> lon;
		std::string time;
	};

	struct NoiseConfig {
		double min_f = 1.0;
		double max_f = 100000.0;
		size_t num = 1000;
		bool log = true;
	};

	struct TotalNoiseData {
		std::vector<std::vector<NoiseSpectrum>> total_noise;  //(lat, lon)
		std::vector<double> lat;
		std::vector<double> lon;
		std::string time;
	};

	class ALGOHUB_EXPORT Noise {
	public:
		TotalNoiseData AreaTotalNoiseCalculation(const WindData& winddata, const int& rainlevel, const ShipData& shipdata, const NoiseConfig& noiseCfg);
	};

	// Helper function to calculate ship levels based on ship density data
	std::vector<std::vector<int>> getShipLevels(const ShipData& shipdata);
}



#endif _NOISE_H_